package com.edu.d6_this;

public class test {
    /**
     * this(...)的使用
     */
    public static void main(String[] args) {
        Student student2 = new Student();
        Student student = new Student("奥特曼", 2222);//先寻找子类的有参构造，子类使用super又继承调用了父类的有参构造
        System.out.println(student.getName());
        System.out.println(student.getAge());
        Student student1 = new Student("this(...)的方法");
        System.out.println(student1.getName());
        System.out.println(student1.getAge());
    }
}
class People{
    private String name;
    private int age;
    //子类在执行构造方法时，会优先执行父类的无参构造，优先于所有的构造方法
    public People() {
        System.out.println("父类无参构造");
    }

    /**
     * this(...)的使用
     * this和super都必须写在构造器的首行
     * 子类各个构造方法的首行都默认有一个super
     */

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
class Student extends People{
    //倘若子类中没有构造方法，想要使用子类对象调用父类中的构造方法，就要在子类中添加构造方法
    public Student(){
    }
    //子类不能继承父类的构造器，因此，要使用父类的构造方法就要，在子类中添加构造方法，然后再用super继承属性，间接使用
    public Student(String name, int age) {
        super(name,age);//子类中写个构造方法，再继承父类的属性即可
    }
    //通过this(...)来调用子类当中的兄弟构造器
    //然后再通过兄弟构造器中的super来调用父类的构造方法
    public Student(String name) {
        this(name,99999);
    }
}
